package com.company.converter;

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTypeConverter implements Converter<String , Date>//泛型
 {
     // 要转换的目标日期类型的格式
     private static final String STR_DATE = "yyyy-MM-dd";
     private static final String STR_DATETIME = "yyyy-MM-dd HH:mm:ss";
     private static final String STR_TIMESTAMP = "yyyy-MM-dd HH:mm:ss.SSS";

     //String 转换成date
     //String来自前台表单，jsp页面
     // 通过依赖注入到controller中去，
     @Override
     public Date convert(String s) {
         return toDate(s);
     }

     /**
      * 将字符串转换为对应格式的Date对象
      *
      * @param value 被转换的值
      * @return Date对象
      */
     private static Date toDate(String value) {
         // 默认返回值为null【也可以为当前系统时间，有业务确定使用那种默认值】
         Date date = null;
         // 当前转换的字符串对象不为空，且不为null
         if (StringUtils.isNotEmpty(value)) {
             // 剔除空格
             String strDateValue = value.trim();
             // 进行类型转换的格式串
             String strFormat = STR_DATE;
             if (strDateValue.length() <= 10) {
                 // 处理格式： "yyyy-MM-dd";
                 // 使用长度为10的格式串  STR_DATE
             } else if (strDateValue.length() <= 19) {
                 // 处理格式："yyyy-MM-dd HH:mm:ss";
                 strFormat = STR_DATETIME;
             } else if (strDateValue.length() <= 23) {
                 // 处理格式："yyyy-MM-dd HH:mm:ss.SSS"
                 strFormat = STR_TIMESTAMP;
             }

             try {
                 // 使用simpledataformat进行转换
                 SimpleDateFormat sdf = new SimpleDateFormat(strFormat);
                 // 如果使用 / 进行分割，则替换为使用 - 进行分割，和时间格式串保持一致
                 strDateValue = strDateValue.replace("/", "-");
                 date = sdf.parse(strDateValue);
             } catch (ParseException e) {
                 System.out.println("数据类型转换错误：" + e.getMessage());
             }
         }
         return date;
     }


//    public static void main(String[] args) {
//        // 给定一个日期字符串
//        String strFormat = "2020/05/15 12:3:10.232";
//        System.out.println("转换之后的日期类型为：" + toDate(strFormat));
//    }
 }
